#pragma once
#include "Pelota.h"
#include "TipoChoque.h"
#include "Sumidero.h"
#include "Dispersor.h"
#include "Carril.h"
#include "Utilidades.h"
#include "Punto.h"
#include "Poligono.h"
#include "vector2d.h"
#include "Bonus.h"
#include <math.h> 
using namespace std;

class logicaColision
{
public:
	logicaColision(int w,int h);
	bool pelotaPelota(Pelota* uno, Pelota* dos, TipoChoque* datosChoque);
	bool carrilSumidero(Pelota* uno, Sumidero* sum, TipoChoque* datosChoque);
	bool pelotaDispersor(Pelota* uno, Dispersor* disp, TipoChoque* datosChoque);
	bool pelotaFin(Pelota* uno,TipoChoque* datosChoque, int anchoPantalla, int altoPantalla);
	void setAnchoAlto(int w, int h);
	bool pelotaBonus(Pelota* uno, Bonus* dos, TipoChoque* datosChoque);


private:
	double sumaAngulos(double anguloActual, double sumando);
	bool hayColisionRadial(Punto* uno, double unoRadio, double dosX, double dosY, double dosRadio);
	bool puntoDentroDePoly(Poligono *poly, Punto *punto);
	bool ladoCorrecto(Punto* inicial,Punto* terminal,Punto* punto);
	bool pelotaDispersorCircular(Pelota* uno, Dispersor* disp, TipoChoque* datosChoque);
	bool pelotaDispersorRectangular(Pelota* uno, Dispersor* disp, TipoChoque* datosChoque);
	bool pelotaDispersorTriangular(Pelota* uno, Dispersor* disp, TipoChoque* datosChoque);
	double anguloSalidaCuadrado(double xmas, double xmin, double ymax, double ymin, Pelota* pel);
	double anguloSalidaTriangulo(double ctroX, double ctroY, double lado, Pelota* pel);
	double anguloSalidaCirculo(double ctroX, double ctroY, double radio, Pelota* pel);
	int ancho;
	int alto;
	
};
